/** @file SystemFunction.cpp
 *  @author Lukáš Michalík
 *  @version 1.0.0
 *  @date 16.4.2013
 */







/* Includes ------------------------------------------------------------------*/

//#include <iostream.h>
//#include "wiringPiSPI.h"
//#include "stdio.h"

#include "wiringPi.h"
//#include "stdio.h"
#include "stdlib.h"			/*!< Obsahuje sunkci system();*/
#include "stdint.h"
//#include "errno.h"
//#include "string.h"
//#include <iostream>
#include "SystemFunction.hpp"
#include "HelloWorld.hpp"
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>

using namespace std;

/** @addtogroup RaspBerryPi_Power_Control
  * @{
  */

/** @adefgroup System_Control
  * @{
  */

/** @defgroup System_Control_Exported_Constants
  * @{
  */


/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/



/** @defgroup System_Control_Private_Functions
  * @{
  */

/**
 * @brief Aktivuje hardwerovou podporu SPI v RaspBerryPi
 * @param void
 * @return none
 */
void SystemLoadSPI(void){
	system("gpio load spi");
}

/**
 * @brief Zformátuje ramdisk, tabulka ext3
 * @param void
 * @return none
 */
void SystemMkfs(void){
	extern T_config konfigurace;

	char buffer[1024]; // use malloc if you like
		sprintf(buffer, "mkfs.ext3 %s%s",konfigurace.dev ,konfigurace.ram0);
	system(buffer);
}


/**
 * @brief Namontuje Ramdisk do soborového systému
 * @param void
 * @return none
 */

void SystemMount(void){
	extern T_config konfigurace;
	char kuffer[1024]; // use malloc if you like
		sprintf(kuffer, "mount %s%s %s",konfigurace.dev,konfigurace.ram0, konfigurace.mountpoit);
		system(kuffer);
}

/**
 * @brief Zapíše data do souboru na disku.
 * @param void
 * @return none
 */
uint8_t DataToFileWrite(const char* const  cesta,const char* const filename, float data){
	char buffer[1024];
	sprintf(buffer, "%s/%s",cesta,filename);
  ofstream myfile (buffer);
  if (myfile.is_open())
  {
    myfile << data << "\n";
    myfile.close();
  }
  else cout << "Unable to open file";
  return 0;
}




/**
 * @brief Zapíše data do souboru na disku.
 * @param void
 * @return none
 */
void mkWorkingdir (void){
	extern T_config konfigurace;
	char buffer[1024];
		sprintf(buffer, "mkdir %s",konfigurace.mountpoit);
		system(buffer);
}

/**
 * @brief Vyplní konfigurační informace do struktury
 * @param void
 * @return none
 * @todo dořešit načítání konfigurace ze souboru
 */
void  Loadenv(void){

	extern T_config konfigurace;
	strcpy(konfigurace.dev, "/dev/");
	strcpy(konfigurace.ram0, "ram0");
	strcpy(konfigurace.ram1, "ram1");
	strcpy(konfigurace.ram2, "ram2");
	strcpy(konfigurace.ram3, "ram3");
	strcpy(konfigurace.ram4, "ram4");
	strcpy(konfigurace.ram5, "ram5");
	strcpy(konfigurace.ram6, "ram6");
	strcpy(konfigurace.ram7, "ram7");
	strcpy(konfigurace.ram8, "ram8");
	strcpy(konfigurace.ram9, "ram9");
	strcpy(konfigurace.ram10, "ram10");
	strcpy(konfigurace.ram11, "ram11");
	strcpy(konfigurace.ram12, "ram12");
	strcpy(konfigurace.ram13, "ram13");
	strcpy(konfigurace.ram14, "ram14");
	strcpy(konfigurace.ram15, "ram15");

	strcpy(konfigurace.mountfolder, "powercontrol");
	strcpy(konfigurace.mountpoit, "/mnt/powercontrol");
	strcpy(konfigurace.fileVrms, "Vrms");
	strcpy(konfigurace.fileIrms, "Irms");
	strcpy(konfigurace.fileRele, "Rele");
	strcpy(konfigurace.fileFrekvency, "Frek");
	strcpy(konfigurace.fileTemperature, "Temperature");
	strcpy(konfigurace.fileVykon, "Vykon");




}



/**
  * @}
  */

/**
  * @}
  */


/**
  * @}
  */

/**
  * @}
  */
